스프링 기본 - Mapping
매핑?
모든 웹사이트는 경로에 따라서 정적데이터 혹은 동적데이터를 반환합니다. 이때, 어떤 경로에 들어오면 어떤 데이터를 반환할 것인지에 대해 정해야 하는데, Spring에서는 해당 작업을 매핑이라고 합니다.
url을 패턴 형태로 매핑합니다.
매핑 방법
- 경로 지정
package hello.springmvc.basic.reuestmapping; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController //body에 리턴 @Slf4j public class MappingController { @RequestMapping("/hello-basic") public String helloBasic(){ log.info("helloBasic"); return "hello"; } }
/hello-basic
에 대하여hello
를 반환합니다.
- Controller class에 작성합니다. (Spring MV
C
)
- 다양한 경로 지정
package hello.springmvc.basic.reuestmapping; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Slf4j public class MappingController { //@RequestMapping("/hello-basic") @RequestMapping({"/hello-basic", "/hello-go"}) public String helloBasic(){ log.info("helloBasic"); return "hello"; } }
- 두개 이상의 경로 지정도 가능합니다.
- 메서드 지정
@RequestMapping(value = {"/hello-basic", "/hello-go"}, method = RequestMethod.GET)
- 메서드를 지정할 수 있습니다.
혹은
@GetMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping @GetMapping(value = "/hello") public String helloBasic(){ log.info("helloBasic"); return "hello"; } //나머지도 형태가 동일하다.
- GetMapping
- Post mapping 등등 어노테이션을 사용해서 지정하는 것이 일반적입니다.
- 리소스 경로에 식별자를 넣음
제공
@GetMapping("/hello/{userId}") public String getUserId(@PathVariable("userId") String data){ // /hello/123 log.info("userId = {}", data); return data; }
- 근래에 경로에 식별자를 넣는 형태로 RestAPI를 구성하기도 합니다.
- 파라미터와는 다른 느낌입니다. 경로를 통해서 데이터를 전달하는 것이며, 해당 데이터를
PathVariable
을 통하여 가져올 수 있습니다.
- PathVariable은 userId를 가져와서 data에 String 타입으로 넣는다. 해당 데이터를 가지고 비즈니스 로직을 처리하면 된다.
@GetMapping("/hello/{userId}") public String getUserId(@PathVariable String userId){ log.info("userId = {}", data); return data; }
- 변수명을 맞춰주면 그냥 사용도 가능하다. (userId)
결과
- 파라미터 식별
기능
@GetMapping(value = "/hello", params = "mode=debug") //파라미터가 mode=debug여야만 호출 public String getParam(){ log.info("param / mode=debug"); return "mode=debug"; }
- 특정 파라미터에 특정 value가 들어왔을 때만 동작하게도 사용할 수 있습니다.
결과
- 특정 헤더 조건 매핑
기능
@GetMapping(value = "/hello-header", headers = "name=jalnik") public String getHeader(){ log.info("Header / name=jalnik"); return "mode=debug"; }
- Header 정보에서 name=jalnik여야만 응답한다.
- 미디어 타입 조건 매핑
기능
@GetMapping(value = "/hello-Content-Type", consumes = "application/json") //파라미터가 mode=debug여야만 호출 public String getJson(){ log.info("type is json"); return "json"; }
- Content-Type이 json형태여야 응답한다.
조건
결과
- Accept-data에 따른 미디어 타입 매핑
기능
@GetMapping(value = "/hello-Accept-Type", produces = "application/json") //파라미터가 mode=debug여야만 호출 public String AcceptJson(){ log.info("type is json"); return "json"; }
결과
3. RestApi 간단 구현
간단한 RestAPI 구현입니다.
import org.springframework.web.bind.annotation.*; @RestController public class MappingClassController { @GetMapping("/hello/users") public String user(){ return "get users"; } @PostMapping("/hello/user") public String addUser(){ return "post user"; } @GetMapping("/hello/users/{userId}") public String findUser(@PathVariable String userId){ return "get userId = " + userId; } @PatchMapping("/hello/users/update/{userId}") public String updateUser(@PathVariable String userId){ return "update userId = " + userId; } @DeleteMapping("/hello/users/delete/{userId}") public String deleteUser(@PathVariable String userId){ return "delete userId = " + userId; } }